#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;

namespace zxf
{
	class string
	{
	public:
		string(const char* str = "")
		{
			size_t len = strlen(str);
			_str = new char[len + 1];
			strcpy(_str, str);
		}

		string(const string& s)
		{
			size_t len = strlen(s._str);
			_str = new char[len + 1];
			strcpy(_str, s._str);
		}

		string& operator=(const string& s)
		{
			if (this != &s)
			{
				char* tmp = new char[strlen(s._str) + 1];
				strcpy(tmp, s._str);
				delete[] _str;
				_str = tmp;
			}
			return *this;
		}

		~string()
		{
			delete[]_str;
			_str = nullptr;
		}

		const char* c_str() const
		{
			return _str;
		}
	private:
		char* _str;
	};
}

int main()
{
	zxf::string s1("hello world");
	cout << s1.c_str() << endl;
	zxf::string s2(s1);
	cout << s2.c_str() << endl;
	zxf::string s3 = s2;
	cout << s3.c_str() << endl;
	return 0;
}